#include<iostream>
#include<unistd.h>
#include<signal.h>

void PrintPendling(sigset_t pendling)
{
    std::cout<<"[pid:"<<getpid()<<"] "<<"sigpendling list: ";
    for(int signo=31;signo>=1;signo--)
    {
        if(sigismember(&pendling,signo))
        {
            std::cout<<"1";
        }
        else
        {
            std::cout<<"0";
        }
    }
    std::cout<<"\r\n";
}

void handler(int signo)
{
    std::cout<<"我获取到了："<<signo<<"信号"<<std::endl;
    sigset_t pendling;
    sigemptyset(&pendling);

    sigpending(&pendling);

    std::cout<<"##########################"<<std::endl;
    PrintPendling(pendling);
    std::cout<<"##########################"<<std::endl;
}


int main()
{
    signal(2,handler);


    sigset_t block,oblock;
    sigemptyset(&block);
    sigemptyset(&oblock);

    // for(int i=1;i<=31;i++)
    // {
    //     sigaddset(&block,i);
    // }
    sigaddset(&block,2);


    sigprocmask(SIG_SETMASK,&block,&oblock);

    int cnt=10;
    while(true)
    {
        sigset_t pendling;
        sigemptyset(&pendling);

        sigpending(&pendling);

        PrintPendling(pendling);
        cnt--;
        if(cnt==0)
        {
            std::cout<<"解除对2号信号的屏蔽"<<std::endl;
            sigprocmask(SIG_SETMASK,&oblock,nullptr);
        }
        sleep(1);
    }
   
}